//package com.demo.connectdbtest.module.price.service.impl;
//
//import com.itextpdf.text.BaseColor;
//import com.itextpdf.text.Document;
//import com.itextpdf.text.DocumentException;
//import com.itextpdf.text.Element;
//import com.itextpdf.text.Font;
//import com.itextpdf.text.Paragraph;
//import com.itextpdf.text.pdf.BaseFont;
//import com.itextpdf.text.pdf.PdfContentByte;
//import com.itextpdf.text.pdf.PdfGState;
//import com.itextpdf.text.pdf.PdfPCell;
//import com.itextpdf.text.pdf.PdfPTable;
//import com.itextpdf.text.pdf.PdfWriter;
//import org.apache.commons.collections.CollectionUtils;
//import org.jvnet.hk2.annotations.Service;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
//@Service
//public class ReportDemoServiceImpl implements ReportDemoService {
//    @Override
//    public void download(Long id, HttpServletResponse response) {
//        //要下载的数据查询数据部分我去掉了有需要自己根据业务取
////        ContractDemandThreeRequestBaseDO baseDO = new ContractDemandThreeRequestBaseDO();
//        ContractDemandThreeRequestBaseRespVO base = new ContractDemandThreeRequestBaseRespVO();
//        base.setDeptName("软件质量部");
//        base.setProjectLeaderName("lijicai");
//        //子表数据
//        List<ContractDemandThreeQuestionDO> details = new ArrayList<>();
//        for (int i = 0; i < 5; i++) {
//            ContractDemandThreeQuestionDO contractDemandThreeQuestionDO = new ContractDemandThreeQuestionDO();
//            contractDemandThreeQuestionDO.setItemContent("343");
//
//        }
//        //下面进行表格的创建、字体设置、合并单元格
//        // 定义全局的字体静态变量
//        Font titlefont;
//        Font headfont;
//        Font keyfont = null;
//        Font textfont = null;
//        Font content = null;
//        BaseFont bfChinese = null;
//        // 最大宽度
//        try {
//            // 不同字体（这里定义为同一种字体：包含不同字号、不同style）这里我用的最后一个                content字体
//            bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            titlefont = new Font(bfChinese, 16, Font.BOLD);
//            headfont = new Font(bfChinese, 14, Font.BOLD);
//            keyfont = new Font(bfChinese, 10, Font.BOLD);
//            textfont = new Font(bfChinese, 15, Font.NORMAL);
//            content = new Font(bfChinese, 10, Font.NORMAL);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        BaseFont bf;
//        Font font = null;
//        try {
//            //创建字体
//            bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
//                    BaseFont.NOT_EMBEDDED);
//            //使用字体并给出颜色
//            font = new Font(bf, 20, Font.BOLD, BaseColor.BLACK);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        Document document = new Document();
//        try {
//            PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());
//            //打开生成的pdf文件
//            document.open();
//            //设置内容
//            Paragraph paragraph = new Paragraph("采购需求三问", font);
//            paragraph.setAlignment(1);
//            //引用字体
//            document.add(paragraph);
//            // 设置表格的列宽和列数
//            float[] widths = {25f, 25f, 25f, 25f};
//            PdfPTable table = new PdfPTable(widths);
//            table.setSpacingBefore(20f);
//            // 设置表格宽度为100%
//            table.setWidthPercentage(100.0F);
//            table.setHeaderRows(1);
//            table.getDefaultCell().setHorizontalAlignment(1);
//            PdfPCell cell = null;
//            //第一行：表格的名字
//            cell = new PdfPCell(new Paragraph("采购项目名称", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            //表格里面的值（下面都是同样的操作）
//            cell = new PdfPCell(new Paragraph("软件协同", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//
//            //第二行
//            cell = new PdfPCell(new Paragraph("项目编号", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("项目code", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("资金类型", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("资金类型", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//
//            //第三行
//            cell = new PdfPCell(new Paragraph("支出类别", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("指出类型", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("预算含税总金额（万元）", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("预算含祱总金额", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            //第三行
//            cell = new PdfPCell(new Paragraph("采购内容", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("基本内容", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            //第四行
//            cell = new PdfPCell(new Paragraph("需求部门", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("部门名称", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("项目负责人", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(30);
//            table.addCell(cell);
//            cell = new PdfPCell(new Paragraph("项目领导者", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table.addCell(cell);
//
//            // 设置表格的列宽和列数
//            float[] widths2 = {25f, 25f, 25f};
//            PdfPTable table2 = new PdfPTable(widths2);
//            table2.setSpacingBefore(20f);
//            // 设置表格宽度为100%
//            table2.setWidthPercentage(100.0F);
//            table2.setHeaderRows(1);
//            table2.getDefaultCell().setHorizontalAlignment(1);
//            //需求三问详情信息标题栏
//            cell = new PdfPCell(new Paragraph("需求三问", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            cell.setFixedHeight(20);
//            table2.addCell(cell);
//            cell = new PdfPCell(new Paragraph("选择项", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table2.addCell(cell);
//            cell = new PdfPCell(new Paragraph("内容项", content));
//            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//            table2.addCell(cell);
//
//            //下面的代码就是样图中底下的表格，需要动态构建数据
//            //人员列表数据-第五行
//            List<List<String>> doList = new ArrayList<>();
//            if (CollectionUtils.isNotEmpty(details)) {
//                //组装数据
//                for (ContractDemandThreeQuestionDO detail : details) {
//                    String natureType = "项目natureType";
//                    String deviceGoodsType = "设备商品类型";
//                    doList.add(Arrays.asList(natureType, deviceGoodsType, detail.getItemContent()));
//                }
//                makeData(doList, content, table2);
//                //为两个表格添加标题
//                document.add(new Paragraph("\n"));
//                document.add(new Paragraph("▋ 基本信息", content));
//                document.add(new Paragraph("\n"));
//                document.add(table);
//                document.add(new Paragraph("\n"));
//                document.add(new Paragraph("▋ 采购需求三问内容", content));
//                document.add(new Paragraph("\n"));
//                //将table2中数据相同的列合并单元格（横向合并）
//                document.add(table2);
//
//                // 加水印（水印组成：下载人姓名-手机号-部门）
////                PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
////                AtomicReference<String> text = new AtomicReference<>("");
////                Long loginUserId = getLoginUserId();
////                AdminUserRedisVO adminUserRedisVO = adminUserRedisDAO.get(loginUserId);
////                Optional.ofNullable(adminUserRedisVO).ifPresent(vo -> {
////                    DeptDO dept = deptService.getDept(adminUserRedisVO.getDeptId());
////                    String deptName = Objects.nonNull(dept) ? dept.getName() : "";
////                    text.set(vo.getNickname() + "-" + vo.getMobile() + "-" + deptName);
////                });
////                addTextFullWaterMark(waterMar, text.get(), bfChinese);
//                //关闭文档
//                document.close();
//            }
//            } catch(DocumentException | IOException e){
//                System.out.println("导出失败");
//                e.printStackTrace();
//            }
//        }
//
//
//
//
//    /**
//     * 合并单元格方法
//     *
//     * @param list        表头数据  list中相连下标位置内容如果相同自动合并 上下位置内容相同自动合并
//     * @param fontChinese 支持转换中文的Font对象
//     * @return
//     */
//    private void makeData(List<List<String>> list, Font fontChinese, PdfPTable table2) {
//        List<List<PdfPCell>> aa = new ArrayList<>();
//        int length = list.get(0).size();
//        //循环在外层，这里代表的是有几列（其实是固定的，因为上面构建的时候，列数就是三列）
//        //下面的循环不用管，是将你组装的数据设置到单元格里
//        for (int i = 0; i < list.size(); i++) {
//            List<String> strings = list.get(i);
//            int colNum = 1;
//            List<PdfPCell> bb = new ArrayList<>();
//            for (int j = 0; j < strings.size(); j++) {
//                if (j + 1 < strings.size()) {
//                    if (strings.get(j).equals(strings.get(j + 1))) {
//                        colNum++;
//                    } else {
//                        PdfPCell cell = new PdfPCell();
//                        //合并列
//                        cell.setColspan(colNum);
//                        Paragraph elements = new Paragraph(strings.get(j), fontChinese);
//                        elements.setAlignment(1);
//                        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//                        cell.setFixedHeight(30);
//                        cell.addElement(elements);
//                        bb.add(cell);
//
//                        for (int a = 1; a < colNum; a++) {
//                            bb.add(null);
//                        }
//                        colNum = 1;
//                    }
//                } else {
//                    PdfPCell cell = new PdfPCell();
//                    cell.setColspan(colNum);
//                    Paragraph elements = new Paragraph(strings.get(j), fontChinese);
//                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//                    elements.setAlignment(1);
//                    cell.setFixedHeight(30);
//                    cell.addElement(elements);
//                    bb.add(cell);
//                    for (int a = 1; a < colNum; a++) {
//                        bb.add(null);
//                    }
//                    colNum = 1;
//                }
//            }
//            aa.add(bb);
//        }
//        //合并算法
//
//        for (int i = 0; i < length; i++) {
//
//            int rowSpan = 1;
//
//            for (int j = 0; j < aa.size(); j++) {
//
//                if (aa.get(j).get(i) == null) {
//                    continue;
//                }
//
//                if (j + 1 < aa.size()) {
//
//                    if (aa.get(j + 1).get(i) != null
//                            && aa.get(j).get(i).getCompositeElements().get(0).toString()
//                            .equals(aa.get(j + 1).get(i).getCompositeElements().get(0).toString())
//                    ) {
//                        rowSpan++;
//                    } else {
//                        aa.get(j - rowSpan + 1).get(i).setRowspan(rowSpan);
//
//                        for (int a = 1; a < rowSpan; a++) {
//                            aa.get(j - rowSpan + 1 + a).set(i, null);
//                        }
//                        rowSpan = 1;
//                    }
//                } else {
//                    aa.get(j - rowSpan + 1).get(i).setRowspan(rowSpan);
//
//                    for (int a = 1; a < rowSpan; a++) {
//                        aa.get(j - rowSpan + 1 + a).set(i, null);
//                    }
//                    rowSpan = 1;
//                }
//            }
//            break;
//        }
//
//        for (List<PdfPCell> a : aa) {
//            for (PdfPCell pCell : a) {
//                if (pCell != null) {
//                    table2.addCell(pCell);
//                }
//            }
//        }
//
//    }
//
//
//    public static void addTextFullWaterMark(PdfContentByte waterMar, String text, BaseFont bf) {
//        waterMar.beginText();
//
//        PdfGState gs = new PdfGState();
//        // 设置填充字体不透明度为0.2f
//        gs.setFillOpacity(0.2f);
//        waterMar.setFontAndSize(bf, 20);
//        // 设置透明度
//        waterMar.setGState(gs);
//        // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
//        for (int x = 0; x <= 900; x += 200) {
//            for (int y = -50; y <= 800; y += 200) {
//                waterMar.showTextAligned(Element.ALIGN_RIGHT, text, x, y, 35);
//            }
//        }
//        // 设置水印颜色
//        waterMar.setColorFill(BaseColor.GRAY);
//        //结束设置
//        waterMar.endText();
//        waterMar.stroke();
//    }
//}
